﻿using FRRJIf;
using RJi.FanucInterface3.Common.Internal;
using RJi.FanucInterface3.Helper;

namespace RJi.FanucInterface3.DataParser.Internal;

internal class DataPositionParser : IDataParser
{
    public bool CanHandle(VariableMetadata metadata)
    {
        var supportedTypes = new HashSet<Type>
        {
            typeof(DataPosRegXyzwpr), // DataCurPosParse 解析
            typeof(DataPosRegMG), // DataCurPosParse 解析
            typeof(DataCurPos), // DataCurPosParse 解析
            typeof(DataPosReg), //DataPosReg 解析
            typeof(DataSysVarPos[]), //DataSysVarPosArrayParse 解析
            typeof(DataSysVarPos) //DataSysVarPosParse 解析
        };

        return supportedTypes.Contains(metadata.DataType);
    }

    public object? Parse(VariableMetadata metadata)
    {
        return metadata.DataType switch
        {
            { } t when t == typeof(DataCurPos) => PosParserHelper.DataCurPosParser(metadata),
            { } t when t == typeof(DataPosReg) => PosParserHelper.DataPosRegParser(metadata),
            { } t when t == typeof(DataSysVarPos) => PosParserHelper.DataSysVarPosParser(metadata),
            { } t when t == typeof(DataSysVarPos[]) => PosParserHelper.DataSysVarPosArrayParser(metadata),
            _ => null
        };
    }
}